// 导入云函数的
const db = uniCloud.database()
const createConfig = require('uni-config-center')
const collectionName = "access-token"
const uniIdConfig = createConfig({
	pluginId: 'uni-id'
}).config()

function isExpiresIn(expires_in) {
	return parseInt(expires_in) > parseInt(new Date().getTime() /
		1000)
}
// 通过appid 和 AppSecret 获取token 
async function getToken(platform) {
	
	const accessTokenUrl = {
		'mp-qq': 'https://api.q.qq.com/api/getToken?grant_type=client_credential&'
	}
	
	// 请求服务器获取access_token
	const cloudToken = await db.collection(collectionName).where({
		platform: 'mp-qq'
	}).get()
	// 判断服务器是否存有access_token并且还没有过期 未过期，直接返回服务器保存的token
	if (cloudToken.data.length > 0 && isExpiresIn(cloudToken.data[0].expires_in))
		return cloudToken.data[0].access_token
	// 通过appid 和 scret 获取微信服务器的access_token
	const apiUrl =
		`${accessTokenUrl[platform]}&appid=${uniIdConfig[platform].oauth.qq.appid}&secret=${uniIdConfig[platform].oauth.qq.appsecret}`
	// 如果过期，则从新获取
	const res = await uniCloud.httpclient.request(apiUrl, {
		method: 'POST',
		data: {},
		dataType: 'json'
	})
	let access_token = res.data.access_token
	// 获取token出错
	if (!access_token)
		return {
			msg: 'token不存在或已经达到最高限度'
		}
	const expires_in = parseInt(new Date().getTime() / 1000) + parseInt(res.data.expires_in)
	// 存到数据库
	cloudToken.data.length > 0 ?
		await db.collection(collectionName).doc(cloudToken.data[0]._id).update({
			access_token,
			platform,
			expires_in
		}) :
		await db.collection(collectionName).add({
			access_token,
			platform,
			expires_in
		})
	return access_token
}

module.exports = {
	getToken
}
